from sqlalchemy import Boolean, Column, ForeignKey, Integer, String  # 导入SQLAlchemy字段类型
from sqlalchemy.orm import relationship  # 导入关系映射模块
from .database import Base  # 导入声明式基类

# 这个文件存放数据库模型 用来定义数据库表结构

# 定义用户模型
class User(Base):
    __tablename__ = "users"  # 表名

    # 用户ID字段
    id = Column(Integer, primary_key=True, index=True)  # 整型主键，自增，索引

    # 邮箱字段
    email = Column(String, unique=True, index=True)  # 字符串类型，唯一，索引

    # 哈希密码字段
    hashed_password = Column(String)  # 字符串类型

    # 是否激活字段
    is_active = Column(Boolean, default=True)  # 布尔类型，默认为True

    # 与Item模型的关系
    items = relationship("Item", back_populates="owner")  # 与Item建立双向关系


# 定义项目模型
class Item(Base):
    __tablename__ = "items"  # 表名

    # 项目ID字段
    id = Column(Integer, primary_key=True, index=True)  # 整型主键，自增，索引

    # 标题字段
    title = Column(String, index=True)  # 字符串类型，索引

    # 描述字段
    description = Column(String, index=True)  # 字符串类型，索引

    # 所属用户ID字段
    owner_id = Column(Integer, ForeignKey("users.id"))  # 整型外键，关联用户表的ID

    # 与User模型的关系
    owner = relationship("User", back_populates="items")  # 与User建立双向关系
